package cn.xiaoniu.day02;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import cn.xiaoniu.day02.bean.IpBean;
import cn.xiaoniu.day02.util.IpUtil;
import cn.xiaoniu.day02.util.SortUtil;

/**
 * 加载行为数据，查找数据，进行数据统计
 * 
 * 容易出问题的点
 * 1：ip转化  （测试）
 * 2：程序一直跑不完
 * 	2.1：陷入死循环
 *  2.2：程序很耗费时间（代码优化）
 * 		找出来死循环在哪里了，程序耗时的地方  
 * 3：控制针异常
 * 
 * @author root
 *
 */
public class TestMain {
	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<>();
		//读取数据
		try (BufferedReader br = new BufferedReader(new FileReader("D:\\data\\access.log"));) {
			String line = null;
			while((line = br.readLine())!=null){
				//System.out.println(line);
				//提取ip
				//20090121000132095572000|125.213.100.123|show.51.com|/shoplist.php?phpfile=
				String[] split = line.split("\\|");
				String strIp = split[1];
				//字符串ip转化为long ip
				long longIp = IpUtil.strIpToLongIp(strIp);
				//根据ip查找相对应的bean（省份）
				IpBean beanByLongIp = IpUtil.newGetBeanByLongIp(longIp);
				//System.out.println(beanByLongIp);
				String province = beanByLongIp.getProvince();
				//如果通过key得到value则直接返回value值，如果没有key，则返回默认值      1.8之后才有的
				Integer count = map.getOrDefault(province, 0);
				count++;
				map.put(province, count);
				
				/*if(map.containsKey(province)){
					Integer count = map.get(province);
					count++;
					map.put(province, count);
				}else{
					map.put(province, 1);
				}*/
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		//排序    list
		//1:map,遍历一遍   key-value(entry)封装成一个bean   把bean放到list里面
		//2:把map里面的entry放到list里面
		Set<Entry<String,Integer>> entrySet = map.entrySet();
		map.entrySet();
		ArrayList<Entry<String,Integer>> list = new ArrayList<>(entrySet);
		//排序
		SortUtil.sortByCount(list);
		//保存数据
		for (Entry<String, Integer> entry : list) {
			System.out.println(entry);
		}
		
	}

}
